home *** CD-ROM | disk | FTP | other *** search
- {*********************************************************}
- {* TstRndU1 *}
- {* Copyright (c) Julian M Bucknall 1998 *}
- {* All rights reserved. *}
- {*********************************************************}
- {* Random number test program - User Interface *}
- {*********************************************************}
-
- {Note: this unit is released as freeware. In other words, you are free
- to use this unit in your own applications, however I retain all
- copyright to the code. JMB}
-
- unit TstRndU1;
-
- interface
-
- uses
- Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, TstRndU2, TstRndU3;
-
- type
- TForm1 = class(TForm)
- ListBox1: TListBox;
- Label1: TLabel;
- Button1: TButton;
- Memo1: TMemo;
- Results: TLabel;
- Button2: TButton;
- ShowChi: TCheckBox;
- procedure Button2Click(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure FormDeactivate(Sender: TObject);
- private
- { Private declarations }
- RandGen : TRandomGenerator;
- public
- { Public declarations }
- procedure PrintChiSqaureResults(TestName : string;
- ChiSquare : double;
- DegsFreedom : integer);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.FormActivate(Sender: TObject);
- begin
- Listbox1.ItemIndex := 0;
- InitializeAdditiveGenerator;
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- Memo1.Clear;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- ChiSquare : double;
- DegsFreedom : integer;
- begin
- if (ListBox1.ItemIndex <> -1) then begin
- case ListBox1.ItemIndex of
- 0 : RandGen := SystemRandom;
- 1 : RandGen := AlgorithmK;
- 2 : RandGen := AdditiveGenerator;
- end;
- Memo1.Text := Memo1.Text +
- Format('===%s===', [ListBox1.Items[ListBox1.ItemIndex]]) + ^M^J;
- {the uniformity test}
- UniformityTest(RandGen, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Uniformity Test', ChiSquare, DegsFreedom);
- {the various gap tests}
- GapTest(RandGen, 0.0, 0.5, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Gap Test (0.0 - 0.5)', ChiSquare, DegsFreedom);
- GapTest(RandGen, 0.5, 1.0, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Gap Test (0.5 - 1.0)', ChiSquare, DegsFreedom);
- GapTest(RandGen, 0.0, 1.0/3.0, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Gap Test (0.0 - 0.33)', ChiSquare, DegsFreedom);
- GapTest(RandGen, 1.0/3.0, 2.0/3.0, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Gap Test (0.33 - 0.67)', ChiSquare, DegsFreedom);
- GapTest(RandGen, 2.0/3.0, 1.0, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Gap Test (0.67 - 1.0)', ChiSquare, DegsFreedom);
- {the poker test}
- PokerTest(RandGen, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Poker Test', ChiSquare, DegsFreedom);
- {the coupon collectors test}
- CouponCollectorsTest(RandGen, ChiSquare, DegsFreedom);
- PrintChiSqaureResults('Coupon Collectors Test', ChiSquare, DegsFreedom);
- end;
- end;
-
- procedure TForm1.PrintChiSqaureResults(TestName : string;
- ChiSquare : double;
- DegsFreedom : integer);
- var
- TestResult : string;
- begin
- if (ChiTable5[DegsFreedom] <= ChiSquare) and
- (ChiSquare <= ChiTable95[DegsFreedom]) then
- TestResult := 'Success'
- else
- TestResult := '**FAILED**';
-
- if ShowChi.Checked then
- Memo1.Text := Memo1.Text +
- Format('%s', [TestName]) + ^M^J +
- Format('[Chi-Square %f, DegsFreedom %d]',
- [ChiSquare, DegsFreedom]) + ^M^J +
- TestResult + ^M^J
- else
- Memo1.Text := Memo1.Text +
- Format('%s: %s', [TestName, TestResult]) + ^M^J;
- end;
-
- procedure TForm1.FormDeactivate(Sender: TObject);
- begin
- DestroyAdditiveGenerator;
- end;
-
- end.
-